Table of Contents
It is traditional for tutorials and introductory books on programming languages start with a program called “Hello, World!” This program is the simplest code necessary to print the text “Hello, World!” It serves as a good test to see that one's build system is functioning and that one can compile and execute code.
Using OpenGL to write actual text is rather involved. In lieu of text, our first tutorial will be drawing a single triangle to the screen.
The source to this tutorial, found in Tut1 Hello
Triangle/tut1.cpp
, is fairly simple. The project file that builds the
final executable actually uses two source files: the tutorial file and a common
framework file found in framework/framework.cpp
. The framework file
is where the actual initialization of FreeGLUT is done; it is also where main is. This
file simply uses functions defined in the main tutorial file.
FreeGLUT is a fairly simple OpenGL initialization system. It creates and manages a single window; all OpenGL commands refer to this window. Because windows in various GUI systems need to have certain book-keeping done, how the user interfaces with this is rigidly controlled.
The framework file expects 5 functions to be defined: defaults
,
init
, display
,
reshape
, and keyboard
. The
defaults
function is called before FreeGLUT is initialized; it
gives the tutorial the chance to modify the window size or the initialization
parameters. The init
function is called after OpenGL is
initialized. This gives the tutorial file the opportunity to load what it needs into
OpenGL before actual rendering takes place. The reshape
function is
called by FreeGLUT whenever the window is resized. This allows the tutorial to make
whatever OpenGL calls are necessary to keep the window's size in sync with OpenGL. The
keyboard
function is called by FreeGLUT whenever the user
presses a key. This gives the tutorial the chance to process some basic user
input.
The display
function is where the most important work happens.
FreeGLUT will call this function when it detects that the screen needs to be rendered
to.